/*
 * DERECHOS DE AUTOR (C) 2014 POR Jose Carlos Palma.
 *
 * TODOS LOS DERECHOS RESERVADOS. NINGUNA PARTE  DE ESTE CÓDIGO FUENTE 
 * PUEDE SER REPRODUCIDA O TRANSMITIDA O UTILIZADA EN  CUALQUIER FORMA 
 * O POR CUALQUIER  MEDIO, YA SEA  ELECTRÓNICO O MECÁNICO,  INCLUYENDO 
 * EL FOTOCOPIADO, GRABACIÓN O POR CUALQUIER SISTEMA DE ALMACENAMIENTO 
 * O RECUPERACIÓN DE INFORMACIÓN SIN  EL PERMISO PREVIO Y  POR ESCRITO
 * DEL PROPIETARIO DE LOS DERECHOS DE AUTOR.
 */

package org.dwh.pivot;

import java.util.ArrayList;

/**
 * Clase que encapsula la lógica para cerrar (liberar) los recursos utilizado.
 * @author Jose Carlos Palma
 * @version v1.0
 */
public abstract class Closer {
    /**
     * Listado de objetos que son cerrables.
     */
    private ArrayList<Closeable> $closeables;
    
    /**
     * Crea una instancia de Closer.
     */
    public Closer(){
        this.$closeables = new ArrayList<>();
    }
    
    /**
     * Agrega un objeto Closeable.
     * @param c objeto que implementa la interface Closeable.
     * @see org.dwh.pivot.Closeable
     */
    public void add(Closeable c){
        this.$closeables.add(c);
    }
    
    /**
     * Remueve un objeto Closeable.
     * @param c objeto que implementa la interface Closeable.
     * @see org.dwh.pivot.Closeable
     */
    public void remove(Closeable c){
        this.$closeables.remove(c);
    }
    
    /**
     * Cierra todos los objetos Closeable registrados.
     * @see org.dwh.pivot.Closeable#close() 
     */
    public void closing(){
        for(Closeable c: this.$closeables){
            c.close();
        }
    }
}
